草庐IT

Python TCPclient 不会承认

全部标签

c++ - Switch 中不正确的多个案例不会生成编译器错误

这个问题在这里已经有了答案:Whatdoescommaoperatormeaninaswitchstatement?(6个答案)关闭7年前。我知道这段代码没有按“预期”工作。快速看一下这段代码,我们认为返回值应该是1,但在执行中它返回返回3。//incorrectvariable=1;switch(variable){case1,2:return1;case3,4:return2;default:return3;}并且有一些正确的选项可以做到这一点://correct1variable=1;switch(variable){case1:case2:return1;case3:case4

c++ - Unsigned Long Long 不会超过第 93 个斐波那契数?

这是我为查找第n个斐波那契数而编写的代码:unsignedlonglongfib(intn){unsignedlonglongu=1,v=1,t;for(inti=2;i虽然算法运行得非常快,但当n>93时,输出开始变得异常。我认为/知道这是因为unsignedlonglong的64位大小。我是C++的新手,但有没有办法解决这个问题,这样我就能得到类似fib(9999)的答案?谢谢 最佳答案 http://gmplib.org/GMPisafreelibraryforarbitraryprecisionarithmetic,oper

c++ - std::ofstream == NULL 不会为 -std=gnu++11 编译,任何解决方法?

考虑以下代码:std::ostreamfile;if(file==NULL)std::cout它在通过-std=gnu11(GCC5.2的默认值)或仅使用时完美编译gcccode.cpp-oa.out.不过,-std=gnu++11失败了:nomatchfor‘operator==’(operandtypesare‘std::ofstream{akastd::basic_ofstream}’and‘longint’)`最简单的解决方法是什么?详细信息:我必须使用std=gnu++11才能访问shared_ptr定义。此外,我的一些代码是自动生成的,修改生成器会付出合理的努力-所以我想知

c++ - 删除 std::list::iterator 不会使迭代器无效并销毁对象吗?

为什么下面打印2?listl;l.push_back(1);l.push_back(2);l.push_back(3);list::iteratori=l.begin();i++;l.erase(i);cout我知道erase返回什么,但我想知道为什么这样可以?或者它是未定义的,还是取决于编译器? 最佳答案 是的,这是未定义的行为。您正在取消引用一种野指针。在erase之后,您不应该使用i的值。是的,erasedestructs指向的对象。但是,对于POD类型,销毁不会执行任何操作。erase不会为被删除的迭代器分配任何特殊的“空”

C++ 编译器不会在默认参数结束前警告缺少参数

我用3个参数声明了一个C++函数声明,其中两个参数有这样的默认值。voidfunc(intconstn,boolconstflag=true,int*array=NULL){/*printcontentsofarray*/}当我错误地调用函数时,省略了第二个参数但包括了第三个参数,就像这样intarray[5]={1,2,3,4,5};func(5,array);gcc和intel编译器(Ubuntu14.04LTS上的默认编译器)都没有提示指定了最后一个参数而没有指定倒数第二个参数。代码运行但为数组发送了NULL(我预计代码会失败)。我的问题是为什么编译器没有提示它找不到匹配的函数,

c++ - 为什么在超出数组末尾写入时不会出现段错误?

为什么编译时没有报错?#includeusingnamespacestd;intmain(){int*a=newint[2];//inta[2];//eventhisisnotgivingerrora[0]=0;a[1]=1;a[2]=2;a[3]=3;a[100]=4;intb;return0;}谁能解释一下为什么会这样。提前致谢。) 最佳答案 因为未定义的行为==任何事情都可能发生。你很不幸它没有崩溃,这种行为可能会隐藏错误。 关于c++-为什么在超出数组末尾写入时不会出现段错误?,

c++ - 为什么我的 "intellect"变量不会加 5?

if(checkForRoll=="intellect"&&checkForRoll=="Intellect"){//checksforintellectintellect=intellect+5;}elseif(checkForRoll=="strength"&&checkForRoll=="Strength"){strength=strength+5;}cout当我执行此命令时,intellectint不会加5。为什么? 最佳答案 您要求您的字符串同时等于intellect和Intellect,这是不可能的。将“和”(&&)更改

c++ - 虚拟继承不会破坏静态组合?

过去5年我一直在假设虚拟继承打破了静态组合。但现在我发现,静态组合仍然存在,只是关于正确实例位置的附加信息。这样对吗? 最佳答案 非虚拟继承中的数据布局:classPoint2d{intx_,y_;};classPoint3d:publicPoint2d{intz_;};点2d:+--------------+|intx_|+--------------+|inty_|+--------------+Point3d:+--------------+--+|intx_||+--------------++--Point2dsubobj

c++ - 反向迭代器不会编译

我正在尝试编译一个反向迭代器,但我这样做的尝试造成了可怕的困惑。代码的最小示例是...#include#include#includeclassfrag{public:voidprint(void)const;private:std::vectora;};voidfrag::print(void)const{for(std::vector::reverse_iteratoriter=a.begin();iter!=a.end();++iter){std::cout并试图编译它产生以下...Infileincludedfrom/usr/include/c++/4.4/bits/stl_a

c++ - 额外的反斜杠字符不会影响我的程序。为什么?

这段代码可以在g++上正常运行。我不是没有为什么。它应该给出一个错误。#includeusingnamespacestd;intmain(){intx=9;inty=6;//notethatthereisextrabackslashintheendofifstatementif(x==y)\{cout 最佳答案 来自C++标准:(C++11,2.2p1)"Eachinstanceofabackslashcharacter(\)immediatelyfollowedbyanew-linecharacterisdeleted,splic